package admin

import (
	"go-weiqi-system/config"
	"go-weiqi-system/internal/models"
	"go-weiqi-system/internal/utils"

	"github.com/gin-gonic/gin"
)

type LoginController struct {
	Config *config.Config
}

// Login 管理员登录
func (ctrl *LoginController) Login(c *gin.Context) {
	var req struct {
		Username string `json:"username" binding:"required"`
		Password string `json:"password" binding:"required"`
	}

	if err := c.ShouldBindJSON(&req); err != nil {
		utils.Error(c, "参数错误")
		return
	}

	// 查询管理员
	var admin models.Admin
	if err := config.DB.Where("username = ?", req.Username).First(&admin).Error; err != nil {
		utils.Error(c, "管理员账号不存在")
		return
	}

	// 检查状态
	if admin.Status != 1 {
		utils.Error(c, "管理员账号已被禁用")
		return
	}

	// 验证密码
	if !utils.CheckPassword(req.Password, admin.Password) {
		utils.Error(c, "密码错误")
		return
	}

	// 生成token
	token, err := utils.GenerateToken(
		admin.ID,
		admin.Username,
		"",
		admin.Nickname,
		"",
		ctrl.Config.JWTSecret,
		ctrl.Config.JWTExpireHours,
	)
	if err != nil {
		utils.Error(c, "生成token失败")
		return
	}

	utils.Success(c, gin.H{
		"token": token,
		"admin": gin.H{
			"id":       admin.ID,
			"username": admin.Username,
			"nickname": admin.Nickname,
		},
	}, "登录成功")
}

// GetAdminInfo 获取管理员信息
func (ctrl *LoginController) GetAdminInfo(c *gin.Context) {
	adminInfo, _ := c.Get("admin_info")
	utils.Success(c, adminInfo)
}
